package com.fclassroom.logger.dao.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

import com.fclassroom.logger.dao.ILogDao;
import com.fclassroom.logger.entity.LogRExamRead;
import com.fclassroom.logger.entity.LogRExamReadDetail;
import com.fclassroom.logger.entity.LogRLogin;
import com.fclassroom.logger.entity.LogRScanner;
import com.fclassroom.logger.entity.OperaterLog;
import com.fclassroom.logger.entity.SystemLog;
import com.jason.framework.util.StringUtil;

/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
             佛祖保佑       永无BUG
	佛曰:  
		写字楼里写字间，写字间里程序员；  
		程序人员写程序，又拿程序换酒钱。  
		酒醒只在网上坐，酒醉还来网下眠；  
		酒醉酒醒日复日，网上网下年复年。  
		但愿老死电脑间，不愿鞠躬老板前；  
		奔驰宝马贵者趣，公交自行程序员。  
		别人笑我忒疯癫，我笑自己命太贱；  
		不见满街漂亮妹，哪个归得程序员？
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
	@author jason
    @date   2015年12月24日 上午9:10:13
	Copyright (c) 2015,  email:14902300@qq.com All Rights Reserved. 
*/
@Repository("systemLogDao")
public class LogDaoImpl implements ILogDao {
	@Resource(name = "sqlSession")
	private SqlSessionTemplate sqlSession;

	@Override
	public void insertSystemLog(SystemLog systemLog) {
		if (systemLog == null || StringUtil.isEmpty(systemLog.getLogLevel())) {
			return;
		}
		List<SystemLog> list = new ArrayList<>();
		list.add(systemLog);
		insertSystemLog(list);
	}

	@Override
	public Integer insertSystemLog(List<SystemLog> list) {
		if (list == null || list.size() < 1) {
			return 0;
		}
		return sqlSession.insert("logDao.insertSystemLog", list);
	}

	@Override
	public void insertOperaterLog(OperaterLog operaterLog) {
		if (operaterLog == null || StringUtil.isEmpty(operaterLog.getLogLevel())) {
			return;
		}
		List<OperaterLog> list = new ArrayList<>();
		list.add(operaterLog);
		insertOperaterLog(list);
	}

	/**
	 * 根据业务日志，拆分出登录日志。
	 * 
	 * @author jason
	 * @date 2016 2016年7月26日 下午5:35:31
	 * @param logRLoginList
	 */
	public void insertLoginLog(List<LogRLogin> logRLoginList) {
		if (logRLoginList == null || logRLoginList.size() < 1) {
			return;
		}
		sqlSession.insert("logDao.insertLoginLog", logRLoginList);
	}

	/**
	 * 阅卷日志的拆解
	 * 
	 * @author jason
	 * @date 2016 2016年7月28日 上午10:07:59
	 * @param logRExamReadList
	 */
	@Override
	public LogRExamRead insertlogRExamRead(LogRExamRead logRExamRead) {
		if (logRExamRead == null) {
			return null;
		}
		sqlSession.insert("logDao.insertlogRExamRead", logRExamRead);
		return logRExamRead;
	}

	@Override
	public void insertlogRExamReadList(List<LogRExamRead> logRExamReadList) {
		if (logRExamReadList == null || logRExamReadList.size() < 1) {
			return;
		}
		sqlSession.insert("logDao.insertlogRExamReadList", logRExamReadList);
	}

	@Override
	public void insertlogRExamReadDetailList(Long logRExamReadId, List<LogRExamReadDetail> logRExamReadDList) {
		if (logRExamReadId == null || logRExamReadDList == null || logRExamReadDList.size() < 1) {
			return;
		}
		Map<String, Object> parma = new HashMap<>();
		parma.put("logRExamReadId", logRExamReadId);
		parma.put("logRExamReadDList", logRExamReadDList);
		sqlSession.insert("logDao.insertlogRExamReadDetailList", parma);
	}

	@Override
	public Integer insertOperaterLog(List<OperaterLog> list) {
		if (list == null || list.size() < 1) {
			return 0;
		}
		return sqlSession.insert("logDao.insertOperaterLog", list);
	}

	@Override
	public int getTurnExamCount(Map<String, Object> map) {
		return sqlSession.selectOne("logDao.getTurnExamCount", map);
	}

	@Override
	public int getReadExamCount(Map<String, Object> map) {
		return sqlSession.selectOne("logDao.getReadExamCount", map);
	}

	@Override
	public List<LogRExamRead> getLogExamRead(LogRExamRead log) {
		return sqlSession.selectList("logDao.getLogExamRead", log);
	}

	@Override
	public List<LogRExamReadDetail> getLogExamReadDetail(LogRExamReadDetail logDetail) {
		return sqlSession.selectList("logDao.getLogExamReadDetail", logDetail);
	}

	@Override
	public LogRScanner saveLogRScanner(LogRScanner logScanner) {
		sqlSession.insert("logDao.saveLogRScanner", logScanner);
		return logScanner;
	}
}
